#ifndef __TRACE_H__
#define __TRACE_H__

#include <stdio.h>
#include <stdarg.h>
#include <time.h>

namespace Downloader
{
	namespace Trace
	{
#define DTRACE_DEFAULT_LVL			DTRACE_LVL_DEBUG
#define DTRACE_DEFAULT_OUT			DTRACE_OUT_STAND
//#define DTRACE_DEFAULT_OUT			DTRACE_OUT_FILE
#define DTRACE_DEFAULT_NAME			"download.log"

#define TRACE(lvl, fmt, ...)					\
		trace(lvl, __func__, fmt, ##__VA_ARGS__);

		void trace(int lvl, const char *func, const char *fmt, ...);

		// 日志等级
		enum DTRACE_LVL {
			DTRACE_LVL_DEBUG,
			DTRACE_LVL_INFO,
			DTRACE_LVL_WARN,
			DTRACE_LVL_ERROR,
			DTRACE_LVL_ENDMARK
		};
		// 日志输出对象
		enum DTRACE_OUT {
			DTRACE_OUT_STAND,	// 标准输出
			DTRACE_OUT_FILE,	// 输出到文件
		};

		class dtrace {
		public:
			const char* lvl_str[DTRACE_LVL_ENDMARK] = {"DEB", "INF", "WAN", "ERR"};

			dtrace();
			~dtrace();

			bool lvl_check(int lvl);
			FILE *stream_get(dtrace& dtrace);

		private:
			enum DTRACE_LVL level; // 日志等级
			FILE *stream;		   // 日志输出流指针
		};
	}
}
#endif	/* #ifndef __TRACE_H__ */
